home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Java for 3D & VRML Worlds
/
Java for 3d and VRML Worlds.iso
/
examples
/
chap04
/
RollingCD.java
< prev
next >
Wrap
Text File
|
1996-09-19
|
2KB
|
60 lines
//
// a sample CD rolls 360 degrees around a random axis when you clicks it.
//
import java.util.*;
import vrml.*;
import vrml.node.*;
import vrml.field.*;
public class RollingCD extends Script{
MFRotation setCDrollingAxis;
SFTime setCDstartTime;
float rollingParameters[] = new float[4 * 5];
Random randomNumGenerator = new Random();
public void initialize(){
// get the reference of the event-out 'setCDrollingAxis'.
setCDrollingAxis = (MFRotation)getEventOut("setCDrollingAxis");
// get the reference of the event-out 'setCDstartTime'.
setCDstartTime = (SFTime)getEventOut("setCDstartTime");
// initialize the rolling parameters.
// axis is set later in setRollingParameters().
// here is to set angles.
rollingParameters[3] = 0.0f;
rollingParameters[7] = 1.57f;
rollingParameters[11] = 3.14f;
rollingParameters[15] = 4.71f;
rollingParameters[19] = 6.28f;
}
public void processEvent(Event e){
if(e.getName().equals("touched") == true){
setRollingParameters();
// invoke the time sensor to roll the CD.
setCDstartTime.setValue(((ConstSFTime)e.getValue()).getValue());
}
}
// set the rolling axis randomly.
void setRollingParameters(){
// angle ranging between 0 to 2PI.
double angle = randomNumGenerator.nextDouble() * Math.PI * 2.0;
// axis.
double axisX = Math.cos(angle);
double axisY = Math.sin(angle);
for(int i = 0; i < 5; i++){
rollingParameters[i * 4 + 0] = (float)axisX;
rollingParameters[i * 4 + 1] = (float)axisY;
rollingParameters[i * 4 + 2] = 0.0f;
}
// set keyValue field of the OrientationInterpolator.
setCDrollingAxis.setValue(4 * 5, rollingParameters);
}
}